package br.uniceub.fsw.agenda.controller;

import br.uniceub.fsw.agenda.exception.BusinessException;
import br.uniceub.fsw.agenda.exception.DatabaseException;
import br.uniceub.fsw.agenda.model.vo.MenuVO;
import br.uniceub.fsw.agenda.model.vo.PessoaVO;
import br.uniceub.fsw.agenda.model.facade.ManterPessoaFacade;
import br.uniceub.fsw.agenda.util.HttpRequestWithModifiableParameters;
import br.uniceub.fsw.agenda.util.NumberUtils;
import java.io.*;
import java.net.*;

import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;

/**
 *
 * @author Bruno Schifer
 */
public class ConsultarPessoaController extends GenericServlet {
    private String nomeTela = "/consultarPessoa/consultarPessoa.jsp";
    public void iniciarTela(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //Facades
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        try {
            //buscar lista de menus
            List<MenuVO> listaMenu = facadePessoa.findAllMenu();
            request.setAttribute("listaDeMenu", listaMenu);
        } catch (BusinessException ex) {          
            request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {            
            request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        
        RequestDispatcher rd = request.getRequestDispatcher(nomeTela);
        rd.forward(request, response);
    }
    
    public void listar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //pegar parametros da tela
        String noPessoa = request.getParameter("noPessoa");
        Long nrCpf = NumberUtils.toLong(request.getParameter("nrCpf"));

        //Facades
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        try {
            
            //buscar lista de menus
            List<MenuVO> listaMenu = facadePessoa.findAllMenu();
            request.setAttribute("listaDeMenu", listaMenu);

            // Busca lista de pessoas de acordo com os parametros
            List<PessoaVO> listaPessoa = facadePessoa.findAllPessoa(noPessoa, nrCpf);
            wrapper.setAttribute("listaDePessoa", listaPessoa);
            
        } catch (BusinessException ex) {
            request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
            request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }

        wrapper.setParameter("noPessoa", "");
        wrapper.setParameter("nrCpf", "");
        
        iniciarTela(wrapper, response);
    }
    
    public void limpar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);
        
        wrapper.setParameter("noPessoa", "");
        wrapper.setParameter("nrCpf", "");
        
        iniciarTela(wrapper, response);
    }

}